These slides and all other course material can be found at

github.com/brry/rhydro

This is an R Markdown Notebook.

For discussions, please visit the Hydrology in R Facebook group


Contents of this workshop


top

report

Good coding practice, report generation (Rstudio, rmarkdown, R notebook)
Daniel Kotz


top

gis

Using R as GIS (reading a rainfall shapefile + Kriging, sf + leaflet + mapview + OSMscale)
Berry Boessenkool

shapefiles

Reading shapefiles with maptools::readShapeSpatial and rgdal::readOGR is obsolete.
Instead, use sf::st_read. sf is on CRAN since oct 2016.

rain <- sf::st_read("data/PrecBrandenburg/niederschlag.shp")
Reading layer `niederschlag' from data source `S:\Dropbox\R\rhydro\presentations\data\PrecBrandenburg\niederschlag.shp' using driver `ESRI Shapefile'
converted into: POLYGON
Simple feature collection with 277 features and 1 field
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: 3250175 ymin: 5690642 xmax: 3483631 ymax: 5932731
epsg (SRID):    NA
proj4string:    +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs
centroids <- sf::st_centroid(rain)
centroids <- sf::st_coordinates(centroids)

top

Plotting, maps

Static plot:

plot(rain[,1])

Static map:

prj <- sf::st_crs(rain)$proj4string
centroids <- as.data.frame(centroids)
cent_ll <- OSMscale::projectPoints(Y,X, data=centroids, to=OSMscale::pll(), from=prj)
map_static <- OSMscale::pointsMap(y,x, cent_ll, fx=0.08, type="maptoolkit-topo", zoom=6)
Downloading map with extend 11.029332, 14.981464, 51.10418, 53.765423 ...
Done. Now plotting...

Interactive map:

library(leaflet)
cent_ll$info <- paste0(sample(letters,nrow(cent_ll),TRUE), ", ", round(cent_ll$x,2), 
                       ", ", round(cent_ll$y,2))
leaflet(cent_ll) %>% addTiles() %>% addCircleMarkers(lng=~x, lat=~y, popup=~info)

Interactive map of shapefile:

# devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop")
library(berryFunctions) # classify, seqPal
col <- seqPal(n=100, colors=c("red","yellow","blue"))[classify(rain$P1)$index]
mapview::mapview(rain, col.regions=col)

top

Kriging


top

discharge

River discharge time-series visualisation and extreme value statistics (animation + extremeStat)
Berry Boessenkool


top

hydmod

Hydrological modelling with airGR
Katie Smith


top

eda

Exploratory Data Analysis including flow duration curve and trend analysis on time-series
Shaun Harrigan


top

LS0tDQp0aXRsZTogIlVzaW5nIFIgaW4gaHlkcm9sb2d5IChFR1UyMDE3IHNob3J0IGNvdXJzZSkiDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOiANCiAgICBjb2RlX2ZvbGRpbmc6IG5vbmUNCi0tLQ0KDQpUaGVzZSBzbGlkZXMgYW5kIGFsbCBvdGhlciBjb3Vyc2UgbWF0ZXJpYWwgY2FuIGJlIGZvdW5kIGF0ICANCg0KIyBbZ2l0aHViLmNvbS9icnJ5L3JoeWRyb10oaHR0cHM6Ly9naXRodWIuY29tL2Jycnkvcmh5ZHJvKQ0KDQpUaGlzIGlzIGFuIFtSIE1hcmtkb3duIE5vdGVib29rXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tL3Jfbm90ZWJvb2tzLmh0bWwpLg0KDQpGb3IgZGlzY3Vzc2lvbnMsIHBsZWFzZSB2aXNpdCB0aGUgDQpbSHlkcm9sb2d5IGluIFIgRmFjZWJvb2sgZ3JvdXBdKGh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9ncm91cHMvMTEzMDIxNDc3NzEyMzkwOS8pDQoNClwNCg0KKipDb250ZW50cyBvZiB0aGlzIHdvcmtzaG9wKioNCg0KKiBbR29vZCBjb2RpbmcgcHJhY3RpY2UsIHJlcG9ydCBnZW5lcmF0aW9uXSgjcmVwb3J0KSAoUnN0dWRpbywgYHJtYXJrZG93bmAsIFIgbm90ZWJvb2spDQoqIFtVc2luZyBSIGFzIEdJU10oI2dpcykgKHJlYWRpbmcgYSByYWluZmFsbCBzaGFwZWZpbGUgKyBLcmlnaW5nLCBgc2ZgICsgYGxlYWZsZXRgICsgYG1hcHZpZXdgICsgYE9TTXNjYWxlYCkNCiogW1JpdmVyIGRpc2NoYXJnZSB0aW1lLXNlcmllc10oI2Rpc2NoYXJnZSkgdmlzdWFsaXNhdGlvbiBhbmQgZXh0cmVtZSB2YWx1ZSBzdGF0aXN0aWNzIChgYW5pbWF0aW9uYCArIGBleHRyZW1lU3RhdGApDQoqIFtIeWRyb2xvZ2ljYWwgbW9kZWxsaW5nXSgjaHlkbW9kKSB3aXRoIGBhaXJHUmANCiogW0V4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXNdKCNlZGEpIGluY2x1ZGluZyBmbG93IGR1cmF0aW9uIGN1cnZlIGFuZCB0cmVuZCBhbmFseXNpcyBvbiB0aW1lLXNlcmllcw0KDQpcDQpbdG9wXSgjdG9wKQ0KDQojIHJlcG9ydA0KR29vZCBjb2RpbmcgcHJhY3RpY2UsIFtyZXBvcnQgZ2VuZXJhdGlvbl0oI3JlcG9ydCkgKFJzdHVkaW8sIGBybWFya2Rvd25gLCBSIG5vdGVib29rKSAgDQoqKkRhbmllbCBLb3R6KioNCg0KXA0KW3RvcF0oI3RvcCkNCg0KIyBnaXMNClVzaW5nIFIgYXMgR0lTIChyZWFkaW5nIGEgcmFpbmZhbGwgc2hhcGVmaWxlICsgS3JpZ2luZywgYHNmYCArIGBsZWFmbGV0YCArIGBtYXB2aWV3YCArIGBPU01zY2FsZWApICANCioqQmVycnkgQm9lc3Nlbmtvb2wqKg0KDQojIyMgc2hhcGVmaWxlcw0KDQpSZWFkaW5nIHNoYXBlZmlsZXMgd2l0aCBgbWFwdG9vbHM6OnJlYWRTaGFwZVNwYXRpYWxgIGFuZCBgcmdkYWw6OnJlYWRPR1JgIGlzIG9ic29sZXRlLiAgDQpJbnN0ZWFkLCB1c2UgYHNmOjpzdF9yZWFkYC4gYHNmYCBpcyBvbiBDUkFOIHNpbmNlIG9jdCAyMDE2Lg0KDQpgYGB7cn0NCnJhaW4gPC0gc2Y6OnN0X3JlYWQoImRhdGEvUHJlY0JyYW5kZW5idXJnL25pZWRlcnNjaGxhZy5zaHAiKQ0KY2VudHJvaWRzIDwtIHNmOjpzdF9jZW50cm9pZChyYWluKQ0KY2VudHJvaWRzIDwtIHNmOjpzdF9jb29yZGluYXRlcyhjZW50cm9pZHMpDQpgYGANCg0KW3RvcF0oI3RvcCkNCg0KIyMjIFBsb3R0aW5nLCBtYXBzDQoNClN0YXRpYyBwbG90Og0KYGBge3J9DQpwbG90KHJhaW5bLDFdKQ0KYGBgDQoNClN0YXRpYyBtYXA6DQpgYGB7cn0NCnByaiA8LSBzZjo6c3RfY3JzKHJhaW4pJHByb2o0c3RyaW5nDQpjZW50cm9pZHMgPC0gYXMuZGF0YS5mcmFtZShjZW50cm9pZHMpDQpjZW50X2xsIDwtIE9TTXNjYWxlOjpwcm9qZWN0UG9pbnRzKFksWCwgZGF0YT1jZW50cm9pZHMsIHRvPU9TTXNjYWxlOjpwbGwoKSwgZnJvbT1wcmopDQptYXBfc3RhdGljIDwtIE9TTXNjYWxlOjpwb2ludHNNYXAoeSx4LCBjZW50X2xsLCBmeD0wLjA4LCB0eXBlPSJtYXB0b29sa2l0LXRvcG8iLCB6b29tPTYpDQpgYGANCg0KSW50ZXJhY3RpdmUgbWFwOg0KYGBge3J9DQpsaWJyYXJ5KGxlYWZsZXQpDQpjZW50X2xsJGluZm8gPC0gcGFzdGUwKHNhbXBsZShsZXR0ZXJzLG5yb3coY2VudF9sbCksVFJVRSksICIsICIsIHJvdW5kKGNlbnRfbGwkeCwyKSwgDQogICAgICAgICAgICAgICAgICAgICAgICIsICIsIHJvdW5kKGNlbnRfbGwkeSwyKSkNCmxlYWZsZXQoY2VudF9sbCkgJT4lIGFkZFRpbGVzKCkgJT4lIGFkZENpcmNsZU1hcmtlcnMobG5nPX54LCBsYXQ9fnksIHBvcHVwPX5pbmZvKQ0KYGBgDQoNCkludGVyYWN0aXZlIG1hcCBvZiBzaGFwZWZpbGU6DQpgYGB7cn0NCiMgZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJlbnZpcm9ubWVudGFsaW5mb3JtYXRpY3MtbWFyYnVyZy9tYXB2aWV3IiwgcmVmID0gImRldmVsb3AiKQ0KbGlicmFyeShiZXJyeUZ1bmN0aW9ucykgIyBjbGFzc2lmeSwgc2VxUGFsDQpjb2wgPC0gc2VxUGFsKG49MTAwLCBjb2xvcnM9YygicmVkIiwieWVsbG93IiwiYmx1ZSIpKVtjbGFzc2lmeShyYWluJFAxKSRpbmRleF0NCm1hcHZpZXc6Om1hcHZpZXcocmFpbiwgY29sLnJlZ2lvbnM9Y29sKQ0KYGBgDQoNClt0b3BdKCN0b3ApDQoNCiMjIyBLcmlnaW5nDQoNCg0KXA0KW3RvcF0oI3RvcCkNCg0KIyBkaXNjaGFyZ2UNClJpdmVyIGRpc2NoYXJnZSB0aW1lLXNlcmllcyB2aXN1YWxpc2F0aW9uIGFuZCBleHRyZW1lIHZhbHVlIHN0YXRpc3RpY3MgKGBhbmltYXRpb25gICsgYGV4dHJlbWVTdGF0YCkgIA0KKipCZXJyeSBCb2Vzc2Vua29vbCoqDQoNClwNClt0b3BdKCN0b3ApDQoNCiMgaHlkbW9kDQpIeWRyb2xvZ2ljYWwgbW9kZWxsaW5nIHdpdGggYGFpckdSYCAgIA0KKipLYXRpZSBTbWl0aCoqDQoNClwNClt0b3BdKCN0b3ApDQoNCiMgZWRhDQpFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzIGluY2x1ZGluZyBmbG93IGR1cmF0aW9uIGN1cnZlIGFuZCB0cmVuZCBhbmFseXNpcyBvbiB0aW1lLXNlcmllcyAgIA0KKipTaGF1biBIYXJyaWdhbioqDQoNClwNClt0b3BdKCN0b3ApDQo=